package com.my.feign;

import com.atguigu.springcloud.entities.Payment;
import com.baomidou.mybatisplus.extension.api.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

/*
* fallbackFactory 与 fallback 方法不能同时使用，
* 这个两个方法其实都类似于 Hystrix 的功能，当网络不通时返回默认的配置数据。
*
* contextId 用作bean名，但不会作为服务id
使用情况: 一个微服务创建多个FeignClient, 因为服务名称相同, 但是每个client具有不同的自定义配置, 则必须使用contextId属性, 以避免配置Bean名称相同发生冲突.
列: 就比如该代码, getFeignClient调用的是provider, HeaderFeignClient调用的也是provider, 但是他们两个的配置是不一样的, 这时就需要指定该值来进行区分
如果不进行区分, 因为Bean名称相同, 会导致冲突, 就该项目而言, HeaderFeignClient配置了契约, 对应的消费者都要使用契约模式
————————————————
版权声明：本文为CSDN博主「Chaim_chen」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。
原文链接：https://blog.csdn.net/qq_38637558/article/details/116130453
* */
@Component
@FeignClient(
//        value = AppConstant.APPLICATION_USER_NAME,
        value = "CLOUD-PAYMENT-SERVICE",
        fallback = TestFeignFallback.class,
        contextId = "iTestFeign"
)
public interface ITestFeign {

    String API_PREFIX = "/feign/payment";

    @GetMapping(API_PREFIX + "/findOne")
    R<Payment> findOne(@RequestParam("id") Long id);

    /*
    * 调用默认1秒钟超时 超过会报错
    * 可以在yml中开启配置 超过1秒
    * #设置feign客户端超时时间
        ribbon:
          ReadTimeout: 5000
          ConnectTimeout: 5000
    * */
    @GetMapping(API_PREFIX + "/timeOut")
    R timeOut();
}
